/*
 Автор: Швейкин Евгений Юрьевич
 Имя модуля: mdio


 Функциональное описание:     

    
*/
//--------------------------------------------------------------------------------------------------
    // Описывает процесс модуля выделения фронтов сигнала. Строб формируется на том же такте.
    // Так же описывает создание новых сигналов с именем <имя сигнала> + <_rise> (<_fall>, <_edge>)
    `define FRONT(clk, name)                            \
        logic name``_0;                                 \
        logic name``_rise;                              \
        logic name``_fall;                              \
        logic name``_edge;                              \
        assign name``_rise = name & (~name``_0);        \
        assign name``_fall = name``_0 & (~name);        \
        assign name``_edge = name ^ name``_0;           \
        always_ff @(posedge clk)                        \
        begin                                           \
            name``_0 <= name;                           \
        end
// *********************** НАЧАЛО МОДУЛЯ ***********************************************************
module ena
(
    input  logic            clk,

    input  logic            sig,
    output logic            ena
);


//  ********************* КОНСТАНТЫ ****************************************************************

//  ********************* ТИПЫ ДАННЫХ **************************************************************

    
//  ********************* ПЕРЕМЕННЫЕ ***************************************************************
// ********************* INITIAL *******************************************************************

//  ********************* ФУНКЦИИ ******************************************************************

//  ********************* ASSIGN *******************************************************************


// ********************* ПРОЦЕССЫ ******************************************************************
    `FRONT(clk, sig)
    
    // Формируем выходную частоту последовательного интенрфейса
    always_ff @(posedge clk)       
    begin  
        if (sig_rise)
            ena <= 1'b0;
        else if (sig_fall)
            ena <= 1'b1;
        else;
    end
    
endmodule 
